package com.sanjin.dubbo.transport;

import java.net.InetSocketAddress;
import java.net.URL;

/**
 * 在client/server模式下，每个client或者server都是一个Endpoint，
 * 有自己的socketAddress，client与server之间通过channel连接，
 * 均有自己的channelHandler(处理连接远程服务器，处理从channel接受到的消息)，
 * 每个Endpoint也应该具备发送消息的能力
 *
 * @author: jiangxch
 * @date: 2021/2/17 下午10:21
 */
public interface Endpoint {
    
    /**
     * 获取端点自己的地址，返回url形式
     * @return
     */
    URL getUrl();
    
    /**
     * 获取端点自己的地址，返回IP:PORT形式
     * @return
     */
    InetSocketAddress getLocalAddress();
    
    /**
     * 获取端点的通道处理
     * @return
     */
    ChannelHandel getChannelHandler();
    
    /**
     * 端点向channel发送消息，
     * 对于客户端来说是发送消息到服务端，
     * 对于服务端来说是发送消息到所有的客户端
     *
     * @param message
     */
    void send(Object message);
    
    /**
     * 端点关闭，需要释放资源，如socket连接
     */
    void close();
    
    /**
     * 当前端点是否关闭
     * @return
     */
    boolean isClosed();
}
